// 1. 变量的类型推断
let a = 1;      // 推断为 number
let b = 'hi';   // 推断为 string
let c = true;   // 推断为 boolean

// 推断后仍然会类型检查
a = 'hello'; // ❌ Error: 不能把 string 赋给 number


// 2. 函数返回值推断
function sum(x: number, y: number) {
  return x + y;
}
// sum 的返回类型被推断为 number


// 3. 参数的上下文推断（Contextual Typing）
window.onmousedown = function (event) {
  console.log(event.button); // event 被推断为 MouseEvent
};

// 4. 最佳通用类型
let arr = [1, 'hello', null];
// 推断类型：(string | number | null)[]


// 5. 字面量类型推断
const x = 'hi';
// x 的类型是 'hi'（字面量类型）

let y = 'hi';
// y 的类型是 string（更宽松）


